﻿// ConsoleApplication2.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
// 参考https://blog.csdn.net/weixin_44088756/article/details/104034367
#include"main.h"
#include"get_c.cpp"
#include"get_n.cpp"
#include"get_s.cpp"
#include"funcs.cpp"

int main(int argc, char** argv) 
{
	// TODO 加错误检查
	if (argc == 1) //未输入命令行参数，报错并返回
	{	
		cout << "please input command in cmd line" << endl;
		return 0;
	}
	else 
	{
		if (!strcmp(argv[1], "-c")) // 第一个为-c即生成若干终盘
		{ 
			int final_num = atoi(argv[2]); // 终盘数量
			//若无法转换则代表存在非法输入
			if (final_num > 0 && final_num <= 1000000) 
			{
				GetC(final_num); // 生成若干终局到txt
			}
			else // 数量错误
			{
				cout << "please input number after -c" << endl;
				return 0;
			}
		}
		else if (!strcmp(argv[1], "-s")) // 需要解的数独文件路径
		{
			// TODO 解argv[2]的数独
			GetS(argv[2]);
		}
		else if (!strcmp(argv[1], "-n")) // 包含-n
		{
			if (argc == 3) // 只有-n
			{
				// TODO -n
				GetN(atoi(argv[2]));
			}
			else if (argc == 4 && !strcmp(argv[3], "-u")) // 解唯一
			{
				// TODO -n -u
				GetNU(atoi(argv[2]));
			}
			else if (argc == 5)
			{
				if (!strcmp(argv[3], "-m")) // 难度
				{
					// TODO -n -m
					GetNM(atoi(argv[2]), atoi(argv[4]));
				}
				else if (!strcmp(argv[3], "-r")) // 挖空20~55
				{
					// TODO
					GetNR(atoi(argv[2]), argv[4]);
				}
			}
		}
		else 
		{	//错误输入，报错
			cout << "input cmd error!" << endl;
			return 0;
		}
	}
}

// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
// 调试程序: F5 或调试 >“开始调试”菜单

// 入门使用技巧: 
//   1. 使用解决方案资源管理器窗口添加/管理文件
//   2. 使用团队资源管理器窗口连接到源代码管理
//   3. 使用输出窗口查看生成输出和其他消息
//   4. 使用错误列表窗口查看错误
//   5. 转到“项目”>“添加新项”以创建新的代码文件，或转到“项目”>“添加现有项”以将现有代码文件添加到项目
//   6. 将来，若要再次打开此项目，请转到“文件”>“打开”>“项目”并选择 .sln 文件
